package com.van.utils;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;

/**
 * 时间工具包
 *
 * @author VanKa qq:2395073039
 * @date 2021/7/8 11:26
 */
public class DateUtils {
    /* 时间格式化实例对象 */
    public static final SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
    public static final SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    public static final SimpleDateFormat sdf3 = new SimpleDateFormat("yyMMddHHmmss");
    public static final SimpleDateFormat sdf4 = new SimpleDateFormat("yyyyMMdd");
    public static final SimpleDateFormat sdf5 = new SimpleDateFormat("yyyy-MM-dd HH:mm");
    public static final SimpleDateFormat sdf6 = new SimpleDateFormat("yyyy.MM.dd");
    public static final SimpleDateFormat sdf7 = new SimpleDateFormat("yyyyMM");
    public static final SimpleDateFormat sdf8 = new SimpleDateFormat("yyMMddHHmmssSS");
    public static final SimpleDateFormat sdf9 = new SimpleDateFormat("HH:mm:ss");
    public static final SimpleDateFormat sdf10 = new SimpleDateFormat("yyyyMMddHHmmssSS");
    public static final SimpleDateFormat sdf11 = new SimpleDateFormat("yyyyMMddHHmmss");
    public static final SimpleDateFormat sdf12 = new SimpleDateFormat("dd/MM/yyyy");
    public static final SimpleDateFormat sdf13 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
    public static final SimpleDateFormat sdf14 = new SimpleDateFormat("yyyy-MM-dd HH");
    public static final SimpleDateFormat sdf15 = new SimpleDateFormat("HH");
    public static final SimpleDateFormat sdf16 = new SimpleDateFormat("HH:MM");

    /**
     * 时间延长N个月
     *
     * @param i 数量
     */
    public static Date TimeExtensionMonth(Date d, int i) {

        LocalDateTime localDateTime = d.toInstant()
                .atZone(ZoneId.systemDefault())
                .toLocalDateTime().plusMonths(i);

        return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
    }

    /**
     * 两个时间之差
     *
     * @param d1 时间
     * @param d2 时间
     * @return 天数
     */
    public static Long timeLagDay(Date d1, Date d2) {
        return (timeLagMillisecond(d1, d2) / (1000 * 60 * 60 * 24));
    }

    /**
     * 两个时间之差
     *
     * @param d1 时间
     * @param d2 时间
     * @return 小时
     */
    public static Long timeLagHour(Date d1, Date d2) {
        return (timeLagMillisecond(d1, d2) / (1000 * 60 * 60));
    }

    /**
     * 两个时间之差
     *
     * @param d1 时间
     * @param d2 时间
     * @return 分钟
     */
    public static Long timeLagMinute(Date d1, Date d2) {
        return (timeLagMillisecond(d1, d2) / (1000 * 60));
    }
    /**
     * 两个时间之差
     *
     * @param d1 时间
     * @param d2 时间
     * @return 分钟
     */
    public static Long timeLagSecond(Date d1, Date d2) {

        return (timeLagMillisecond(d1, d2) / (1000));
    }



    /**
     * 两个时间之差
     *
     * @param d1 时间
     * @param d2 时间
     * @return 毫秒
     */
    public static Long timeLagMillisecond(Date d1, Date d2) {
        if (d1.before(d2)) {
            return d2.getTime() - d1.getTime();
        } else {
            return d1.getTime() - d2.getTime();
        }
    }

}
